package pe.com.bbva.pct.messages;

import java.text.MessageFormat;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import pe.com.bbva.pct.enumeracion.EnumMessage;


public class BussinessMessage {
	
	private String mensaje;
	private String causa;	  
	private EnumMessage tipo;
		
	public BussinessMessage(String mensaje, String causa) {		
		this.mensaje = Messages.getStringInformacion(mensaje);
		this.causa = Messages.getStringInformacion(causa);
		this.tipo=EnumMessage.Informativo;
	}
	
	public BussinessMessage(String mensaje, String causa,EnumMessage tipo) {						
		if (tipo==EnumMessage.Informativo || tipo==EnumMessage.Advertencia)
			this.mensaje = Messages.getStringInformacion(mensaje);
		else
			this.mensaje = Messages.getStringError(mensaje);
		this.tipo=tipo;
		this.causa = causa;	
	}

	public BussinessMessage(Exception ex){
		this.mensaje=ex.getMessage();
		if (ex.getCause()!=null)
			this.causa=ex.getCause().toString();
		this.tipo=EnumMessage.Error;
	}
	
	public BussinessMessage(BussinessException be){					
		if (be.getParametros()!=null){
			MessageFormat.format(Messages.getStringError(be.getMensaje()),be.getParametros());
		}else{
			this.mensaje=Messages.getStringError(be.getMensaje());
		}
		this.causa=be.getCause().toString();
		this.tipo=EnumMessage.Error;
	}

	public BussinessMessage(RuntimeException ex){
		this.mensaje=ex.getMessage();
		this.causa=ex.getCause().toString();
		this.tipo=EnumMessage.Error;
	}
	
	public void generarMensaje(){
		switch (tipo) {
		case Informativo:
			addInfo(this.mensaje, this.causa);
			break;
		case Error:
			addError(this.mensaje, this.causa);
			break;
		case Advertencia:
			addWarn(this.mensaje, this.causa);
			break;			
		default:
			addFatal(this.mensaje, this.causa);
			break;
		}				
	}
	
	
	public static void addInfo(String mensaje,String descripcion) {  
        FacesContext.getCurrentInstance().addMessage(null, 
        		new FacesMessage(FacesMessage.SEVERITY_INFO,mensaje, descripcion ));  
    }  
  
    public static void addWarn(String mensaje,String descripcion) {  
        FacesContext.getCurrentInstance().addMessage(null, 
        		new FacesMessage(FacesMessage.SEVERITY_WARN,mensaje, descripcion));  
    }  
  
    public static void addError(String mensaje,String descripcion) {  
        FacesContext.getCurrentInstance().addMessage(null, 
        		new FacesMessage(FacesMessage.SEVERITY_ERROR,mensaje, descripcion));  
    }  
  
    public static void addFatal(String mensaje,String descripcion) {  
        FacesContext.getCurrentInstance().addMessage(null, 
        		new FacesMessage(FacesMessage.SEVERITY_FATAL,mensaje, descripcion));  
    }

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public String getCausa() {
		return causa;
	}

	public void setCausa(String causa) {
		this.causa = causa;
	}

	public EnumMessage getTipo() {
		return tipo;
	}

	public void setTipo(EnumMessage tipo) {
		this.tipo = tipo;
	}      
        
		
}
